/**
 * @file   QMiraIRobot2DPainter.h
 * @author Josep Sabater (jsabaterm@el.ub.edu)
 * @date   November, 2016
 * @version 1.0.0
 * @ingroup QMira
 * @brief  Interface for a generic Robot2D painter
 *
 * Contains the methods each Robot Painter must implement.
 */
#ifndef Q_MIRA_I_ROBOT_2D_PAINTER_H
#define Q_MIRA_I_ROBOT_2D_PAINTER_H

#include <memory>
#include <QPainter>

#include <MiraTypes.h>

namespace QMira{
    class QIRobot2DPainter {
    public:
            
        typedef unsigned int FrameId_t;        
        typedef std::unique_ptr <QIRobot2DPainter> QIRobot2DPaintUnPtr_t;
        typedef std::vector <QIRobot2DPaintUnPtr_t> QIRobot2DPaintUnPtrCont_t;
            
        /**
         * @brief Virtual destructor
         */  
        virtual ~QIRobot2DPainter() = default;       
        virtual void draw(QPainter &painter, const FrameId_t frame) const = 0;
        virtual FrameId_t addFrame(const MiraUtilUBLib::DoubleCont_t &q) = 0;
        virtual unsigned int clearFrames() = 0;        
    };
}
#endif /*Q_MIRA_I_ROBOT_2D_PAINTER_H*/